package leecode

func minCameraCover(root *TreeNode) int {
	var result int
	// 空节点 , 该节点没有被覆盖
	var traversal func(root *TreeNode) int
	traversal = func(root *TreeNode) int {
		//空节点 该节点有覆盖
		if root == nil {
			return 2
		}
		//左右节点都有覆盖
		left := traversal(root.Left)
		right := traversal(root.Right)

		//如果左右节点都有覆盖 , 此节点的状态应该是无覆盖
		if left == 2 && right == 2 {
			return 0
		}

		// 左 右 至少有一个无覆盖
		if left == 0 || right == 0 {
			result++
			return 1 //当前节点加一个摄像头
		}

		// 如果左右节点 至少有个一有摄像头 当前节点被覆盖
		if left == 1 || right == 1 {
			return 2
		}
		return -1
	}
	//如果此节点无覆盖
	if traversal(root) == 0 {
		result++
	}
	return result
}
